package etude.collecteur.impl;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.Authenticator;
import java.net.HttpURLConnection;
import java.net.PasswordAuthentication;
import java.net.URL;
import java.net.URLConnection;

import etude.collecteur.Collector;
/**
 * Méthode du Collector.
 * 
 * <p>
 * Celle-ci collecte les données d'un serveur. 
 * <p>
 * 
 * @author anthonyestebe
 *
 */
public class CollectorFile implements Collector {

	private	ByteArrayOutputStream outStream = new ByteArrayOutputStream();
	private String username1;
	private String password1;
	private URL urlConsole;
	
	public CollectorFile(URL urlConsole) {
		super();
		this.urlConsole = urlConsole;
	}

	public CollectorFile(URL urlConsole, String username1, String password1) {
		super();
		this.urlConsole = urlConsole;
		this.username1 = username1;
		this.password1 = password1;
	}

	/**
	 * Permet la collecte d'information contenu sur le site et de les renvoyer sous forme de tableau de byte.
	 */
	@Override
	public byte[] collect() {

		// Soit adresse le paramètre correspondant à l'adresse de la console JMX
		
		// Bloc de gestion d'exception si le paramètre adresse est invalide
		 try {

		     // On ouvre la connexion
		     java.net.Authenticator.setDefault(new CustomAuthenticator(username1, password1));
		     URLConnection connexion = urlConsole.openConnection();
			
		     // On précise le type de connexion pour traiter proprement les paramétrages spécifiques
		     HttpURLConnection connexionConsole = (HttpURLConnection)connexion;
			
		     //System.out.println(connexionConsole.getResponseCode()); 
		     
		     InputStream stream = connexionConsole.getInputStream();
		     
			
		     int compteur = stream.read();
		     
		     while(compteur != -1){
		    	 
		    	 outStream.write(compteur);
		    	 compteur = stream.read();
		    	 
		     } 
			

			// TODO: continuer le traitement de paramétrage de la connexion HTTP
		 } 
		 		 
		 catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		 }
		 
		 return outStream.toByteArray();
	}

	/** 
	 * Permet l'accès au site à l'aide des mots de passes.
	 * 
	 * @author anthonyestebe
	 *
	 */
    public static class CustomAuthenticator extends Authenticator {
         
    	private String username1;
    	private String password1;

		public CustomAuthenticator(String username1, String password1) {
			super();
			this.username1 = username1;
			this.password1 = password1;
		}



		// Called when password authorization is needed
    	@Override
        protected PasswordAuthentication getPasswordAuthentication() {
           String username = username1;
           String password = password1;
 
	        // Return the information (a data holder that is used by Authenticator)
            return new PasswordAuthentication(username, password.toCharArray());
             
        }

    }
	
}